週日一堆韓國綜藝要看....好忙!
上一篇Maximum Subarray解題,最後答案有稍作修改。
題目連結:https://leetcode.com/problems/length-of-last-word/
重點提醒:最後一組元素一定有資料,不會是空格。好的,又是一題證明Ruby對資料處理黑魔法的強大...
整理如下
def length_of_last_word(s)
end
p length_of_last_word("Hello World") #=>5
p length_of_last_word(" fly me to the moon ") #=>4
p length_of_last_word("luffy is still joyboy") #=>6
當然我才疏學淺,可能其他語言也許有類似語法。
如果禁止使用Ruby特殊語法的話,可能我會將這組資料由後往前開始檢查,遇到空格不要,遇到字丟進空陣列裡。
或是建立一個計數器是0,遇空格不往上加,檢查到字計數器往上加(丟到陣列裡),再度遇到空格後停止檢查,回傳計數器數字或是新陣列長度。
Ruby部分請先請先了解我們字串有split語法可使用。
2.7.3 :001 > " fly me to the moon ".split
=> ["fly", "me", "to", "the", "moon"]
2.7.3 :002 > ["fly", "me", "to", "the", "moon"].last
=> "moon"
2.7.3 :003 > "moon".size
=> 4
2.7.3 :004 > "moon".length
=> 4
def length_of_last_word(s)
arr = s.split
arr_last = arr.last
arr_last.size
end
def length_of_last_word(s)
s.split.last.size
end
題目連結:https://leetcode.com/problems/plus-one/
題目重點:無,要了解method回傳的到底是啥,並且對物件本身到底會不會改變。
但題目中有一個要素是,陣列中每一個值是0 <= 值 <= 9。
整理
def plus_one(digits)
end
p plus_one([1,2,3]) #=> [1,2,4]
p plus_one([4,3,2,1]) #=> [4,3,2,2]
p plus_one([0]) #=> [1]
第一種解法,利用split與join語法。
2.7.3 :001 > [4,3,2,1].join
=> "4321"
2.7.3 :002 > "4321".to_i + 1
=> 4322
2.7.3 :003 > 4322.to_s
=> "4322"
2.7.3 :004 > "4322".split()
=> ["4322"]
2.7.3 :005 > "4322".split("")
=> ["4", "3", "2", "2"]
def plus_one(digits)
arr = []
new_arr = (digits.join.to_i + 1).to_s.split("")
new_arr.each {|num| arr << num.to_i}
arr
end
#改用map
def plus_one(digits)
new_arr = (digits.join.to_i + 1).to_s.split("")
new_arr.map {|num| num.to_i}
end
如果沒有 0 <= 值 <= 9這個條件。
那我們試著利用針對陣列最後一個數字處理就好。
def plus_one(digits)
return digits if digits[digits.size - 1] = digits[digits.size - 1] + 1
end
我不會承認我一開就這麼解,然後一直想不出哪裡錯....
題目連結:https://leetcode.com/problems/add-binary/
蠻好玩的一題...
好玩的點在於用不用Ruby黑魔法這件事。了解二進制、邏輯、運算公式,我覺得都有助於學習了解程式語言。
特殊語法是把一些運算包起來的,當然如果會比包起來的算法還要快的解法當然好。
不過,這就不是在快速了解Ruby了,是高手在做的事。
我是菜鳥。
直接解答了
def add_binary(a, b)
(a.to_i(2) + b.to_i(2)).to_s(2)
end
p add_binary("11", "1") #=>"100"
p add_binary("1010", "1011") #=>"10101"
美好的週日結束了T_T...